package cn.qn.service;

import cn.qn.dto.user.*;
import cn.qn.enums.SmsTemplatesEnum;
import cn.qn.exceptions.BizException;
import cn.qn.vo.AppUserResetPassVo;
import cn.qn.vo.AppUserVo;

import java.util.List;

/**
 * @author: Bryant
 * @date: 2019/7/15
 * @description:
 */
public interface IAppUserService {
    /**
     * 账号密码登录
     * @param dto
     * @return
     */
    String pwdLogin(LoginPwdDTO dto) throws BizException;

    /**
     * 发送登录短信验证码
     * @param mobile
     */
    void sendSmsVerifyCode(String mobile, SmsTemplatesEnum templates);

    /**
     * 校验验证码
     * @param dto
     * @return
     */
    boolean checkMobileCode(MobileCheckDTO dto, SmsTemplatesEnum templates);

    /**
     * 通过用户编号查询用户信息
     * @param userId
     * @return
     */
    AppUserVo findByUserId(String userId);

    /**
     * 验证码登录
     * @param dto
     * @return
     */
    String smsCodeLogin(MobileCheckDTO dto) throws BizException;

    /**
     * APP用户注册
     * @param dto
     * @return
     */
    String register(RegisterDTO dto) throws BizException;

    /**
     * 查询我关注的用户列表
     * @param userId
     * @return
     */
    List<AppUserAttentionDTO> queryMyAttentions(String userId);

    /**
     * 查询3条我关注的用户列表
     * @param userId
     * @return
     */
    List<AppUserAttentionDTO> queryMyThreeAttentions(String userId);

    /**
     * 关注用户
     * @param userId 当前用户
     * @param attentionId 需要关注的用户
     */
    void attentionOneUser(String userId, String attentionId) throws BizException;

    /**
     * 取消关注
     * @param userId
     * @param attentionId
     */
    void cancleAttentionOneUser(String userId, String attentionId) throws BizException;

    /**
     * 重置APP密码
     * @param vo
     */
    void resetAppPassword(AppUserResetPassVo vo);

    /**
     * 检查手机是否注册
     * @param mobile
     */
    void mobileCheck(String mobile)  throws BizException;

    /**
     * 修改签名
     * @param userId
     * @param signature
     */
    void editSignature(String userId, String signature);

    /**
     * 修改昵称
     * @param userId
     * @param nickName
     */
    void editNickName(String userId, String nickName);

    /**
     * 修改生日
     * @param userId
     * @param birthday
     */
    void editBirthDay(String userId, String birthday);

    /**
     * 修改地址
     * @param vo
     */
    void editAddress(AppUserEditDTO vo);

    /**
     * 修改头像地址
     * @param userId
     * @param headImg
     */
    void editHeadImage(String userId, String headImg);

    /**
     * 修改性别
     * @param userId
     * @param sex
     */
    void editSex(String userId, String sex);
}
